﻿using System;
using System.Linq;
using System.Windows.Forms;
using GDM.Hogar.Aplicacion.Properties;
using GDM.Hogar.Entidades;
using GDM.Hogar.Entidades.Enums;
using GDM.Hogar.Managers.Contratos;

namespace GDM.Hogar.Aplicacion.Formularios.ParteDiarioComedor
{
    public partial class FrmConsultaParteDiarioComedor
#if DEBUG
 : FrmConsultaPartesDiarioComedor
#else
     : FrmConsulta<ConsultaParteDiarioComedor>
#endif
    {
        private readonly IParteDiarioComedorManager _parteDiarioComedorManager;
        private FrmParteDiarioComedor _frmCrearParteDiarioComedor;
        private FrmParteDiarioComedor _frmEditarParteDiarioComedor;

        private Reportes.FrmParteDiarioComedor _frmReporteParteDiarioComedor;

        private bool EsCoordinadorOAdministrativo
        {
            get { return ContextoUsuario.RolId == (int)Rol.Coordinador || ContextoUsuario.RolId == (int)Rol.Administrativo; }
        }

        #region Public Methods

        public FrmConsultaParteDiarioComedor(IParteDiarioComedorManager parteDiarioComedorManager)
        {
            if (parteDiarioComedorManager == null)
                throw new ArgumentNullException("parteDiarioComedorManager");

            _parteDiarioComedorManager = parteDiarioComedorManager;
            InitializeComponent();
        }

        #endregion Public Methods

        protected override void EliminarRegistro(ConsultaParteDiarioComedor parteDiarioComedor)
        {
            try
            {
                //- desactivar parte diario en bd
                _parteDiarioComedorManager.ActivarParteDiarioComedor(parteDiarioComedor.ParteDiarioComedorId, false);
                Datos.First(p => p.ParteDiarioComedorId == parteDiarioComedor.ParteDiarioComedorId).Activo = false;
                CargarPartesDiarioComedor();
                MostrarMensajeExito(Resources.ParteDiario_EliminadoConExito);
            }
            catch (Exception ex)
            {
                MostrarMensajeError(Resources.EliminarParteDiario_Error);
            }
        }

        protected override void CrearRegistro()
        {
            _frmCrearParteDiarioComedor = AbrirFormularioModal(_frmCrearParteDiarioComedor, action: frm => frm.OnParteComedorCreado = CargarPartesDiarioComedor);
        }

        protected override void EditarRegistro(ConsultaParteDiarioComedor parteDiarioComedor)
        {
            _frmEditarParteDiarioComedor = AbrirFormularioModal(_frmEditarParteDiarioComedor, action: frm =>
            {
                frm.ParteDiarioComedor = parteDiarioComedor;
                frm.OnParteComedorActualizado = CargarPartesDiarioComedor;
            });
        }

        private void CargarPartesDiarioComedor()
        {
            var año = DateTime.Now.Year;
            Datos = _parteDiarioComedorManager.ObtenerPartesDiarioComedor(cmbMes.SelectedIndex + 1, año);
            InicializarGrilla(dgParteDiarioComedor);
        }

        private void SetearFechaActual()
        {
            var fechaActual = DateTime.Now;
            if (fechaActual.Month > 2)
            {
                cmbMes.SelectedIndex = fechaActual.Month - 1;
            }
        }

        private void FrmConsultaParteDiarioComedor_Load(object sender, EventArgs e)
        {
            SetearFechaActual();
            dgParteDiarioComedor.UserCanAdd = EsCoordinadorOAdministrativo;
            dgParteDiarioComedor.ReadOnlyMode = !EsCoordinadorOAdministrativo;
            dgParteDiarioComedor.UserCanDelete = true;
            CargarPartesDiarioComedor();
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            _frmReporteParteDiarioComedor = AbrirFormularioModal(_frmReporteParteDiarioComedor, action: frm => frm.Datos = Datos);
        }

        private void parteComedorValidador_CustomValidation(object sender, Controles.Validador.Componentes.ValidationEventArgs e)
        {
            if (e.Control == cmbMes)
            {
                e.Valid = cmbMes.SelectedIndex >= 0;
            }
        }

        private void cmbMes_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!parteComedorValidador.Validate()) return;

            CargarPartesDiarioComedor();
        }
    }
}